﻿#define _CRT_SECURE_NO_WARNINGS
//二进制文件
//10000的二进制 ---> 10 0111 0001 0000
//#include <stdio.h>
//int main()
//{
//	int a = 10000;
//	FILE* pFile = fopen("text.txt", "wb");
//	fwrite(&a, 4, 1, pFile);
//	fclose(pFile);
//	pFile = NULL;
//	return 0;
//}

//fopen和fclose函数
//#include <stdio.h>
//int main()
//{
//	FILE* pf = fopen("text.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	int ret = fclose(pf);
//	printf("%d\n", ret);
//	pf = NULL;
//	return 0;
//}

//fputc函数
//#include <stdio.h>
//int main()
//{
//	FILE* pf = fopen("text.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//    //写文件
//	char c = 0;
//	for (c = 'a';c < 'z';c++)
//	{
//		if (fputc(c, pf) == EOF)
//		{
//			perror("fputc");
//			return 1;
//		}
//	}
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}


//写入控制台
//#include <stdio.h>
//int main()
//{
//	FILE* pf = fopen("text.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//写文件
//	char c = 0;
//	for (c = 'a'; c < 'z'; c++)
//	{
//		if (fputc(c, stdout) == EOF)
//		{
//			perror("fputc");
//			return 1;
//		}
//	}
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//fgetc函数
//#include <stdio.h>
//int main()
//{
//	FILE* pf = fopen("text.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//读文件
//	int ch = 0;
//	while ((ch = fgetc(pf)) != EOF)
//	{
//		printf("%c ", ch);
//	}
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//读取控制台输入的字符
//#include <stdio.h>
//int main()
//{
//	FILE* pf = fopen("text.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//读文件
//	int ch = 0;
//	while ((ch = fgetc(stdin)) != EOF)
//	{
//		printf("%c ", ch);
//	}
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//fputs函数
//#include <stdio.h>
//int main()
//{
//	FILE* pf = fopen("text.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//写一行文件
//	int ch = 0;
//	int ret = fputs("hello world\n", pf);
//	printf("%d\n", ret);
//	fputs("hello world\n", pf);
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//fgets函数
//#include <stdio.h>
//int main()
//{
//	FILE* pf = fopen("text.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//读一行文件
//	char arr[100];
//	fgets(arr,100,pf);
//	printf("%s", arr);
//
//	fgets(arr, 100, pf);
//	printf("%s", arr);
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//fprintf函数
//#include <stdio.h>
//int main()
//{
//	int num = 100;
//	char name[20] = "王群";
//	float score = 55.5f;
//	//打开文件
//	FILE* pf = fopen("text.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//写文件
//	fprintf(pf, "%d %s %f\n", num, name, score);
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//写入控制台
//#include <stdio.h>
//int main()
//{
//	int num = 100;
//	char name[20] = "王群";
//	float score = 55.5f;
//
//	fprintf(stdout, "%d %s %f\n", num, name, score);
//
//	return 0;
//}

//fscanf函数
//#include <stdio.h>
//int main()
//{
//	int num = 0;
//	char name[20] = { 0 };
//	float score = 0;
//	//打开文件
//	FILE* pf = fopen("text.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//读文件
//	fscanf(pf, "%d %s %f\n", &num, name, &score);
//	printf("%d %s %f\n", num, name, score);
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//读取控制台的数据
//#include <stdio.h>
//int main()
//{
//	int num = 0;
//	char name[20] = { 0 };
//	float score = 0;
//	//打开文件
//	FILE* pf = fopen("text.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//读文件
//	fscanf(stdin, "%d %s %f", &num, name, &score);
//	printf("%d %s %f\n", num, name, score);
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//sprintf函数
//#include <stdio.h>
//int main()
//{
//	int num = 100;
//	char name[20] = "小卖店";
//	float score = 52.7f;
//	
//	char str[100] = { 0 };
//	sprintf(str, "%d %s %f", num, name, score);
//	printf("%s\n", str);
//	return 0;
//}

//sscanf函数
//#include <stdio.h>
//int main()
//{
//	int num = 100;
//	char name[20] = "小卖店";
//	float score = 52.7f;
//
//	char str[100] = { 0 };
//	sprintf(str, "%d %s %f", num, name, score);
//	printf("字符串的形式:%s\n", str);
//
//	int n = 0;
//	char name1[20] = { 0 };
//	float score1 = 0.0f;
//	sscanf(str, "%d %s %f", &n, name1, &score1);
//	printf("格式化的形式:%d %s %f\n", n, name1, score1);
//	return 0;
//}

//fwrite函数
//#include <stdio.h>
//int main()
//{
//	//打开文件
//	FILE* pf = fopen("text.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//写二进制文件
//	int arr[] = {1,2,3,4,5};
//	fwrite(arr, sizeof(arr[0]), 5, pf);
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//fread函数
//#include <stdio.h>
//int main()
//{
//	//打开文件
//	FILE* pf = fopen("text.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//读二进制文件
//	int arr[5] = { 0 };
//	int i = 0;
//	while (fread(arr + i, sizeof(arr[0]), 1, pf))
//	{
//		printf("%d ", arr[i]);
//		i++;
//	}
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//随机读写
//fseek函数
//#include <stdio.h>
//int main()
//{
//	//打开文件
//	FILE* pf = fopen("text.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	int ch = fgetc(pf);  //读取到a
//	printf("%c\n", ch);
//	//定位光标位置
//	fseek(pf, 3, SEEK_CUR);
//	/*fseek(pf, -1, SEEK_END);*/
//	//fseek(pf, 6, SEEK_SET);
//	ch = fgetc(pf);      //希望读取到g
//	printf("%c\n", ch);
//
//	rewind(pf);
//	ch = fgetc(pf);      
//	printf("%c\n", ch);
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//feof函数和ferror函数
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
	int c; // 注意：int，⾮char，要求处理EOF
	FILE* fp = fopen("test.txt", "r");
	if (!fp) //fp为NULL，则!fp为真
	{
		perror("File opening failed");
		return EXIT_FAILURE;
	}
	//fgetc 当读取失败的时候或者遇到⽂件结束的时候，都会返回EOF
	while ((c = fgetc(fp)) != EOF) // 标准C I/O读取⽂件循环
	{
		putchar(c);
	}
	//判断是什么原因结束的
	if (ferror(fp))
		puts("I/O error when reading");
	else if (feof(fp))
		puts("End of file reached successfully");
	fclose(fp);
}
